#ifndef GAME_HPP
#define GAME_HPP

#include "stdlib.h"
#include "camera.hpp"
#include <sstream>
#include <fstream>
#include "utils/Log.hpp"

//#include "interface\interface.h"
//#include "debug/statsManager.h"

//#include "terrain\Rendering\terrain.h"
//#include "terrain\Rendering\skydome.h"

//#include "Graphics/ShaderObject.h"

//#include "player\Player.h"

#include "Audio.hpp"

//#include "Managers/GLIDManager.h"
//#include "Managers/ScriptManager.h"

//#include "StateManagement/Settings.h"

#include "interface/Interface.hpp"

class Game
{
public:
  // Functions
  Game();
  ~Game();
  void Init();
  
  void Update(double dTime);
  
  void Draw();
  
  void Draw2d();

  void MouseClick(sf::Mouse::Button button, sf::MouseState state, int x, int y);
  
  void MouseMoved(int x, int y, int dx, int dy);
  
  void MouseDragged(int x, int y, int dx, int dy);
  
  void MouseWheel(int dir);
  
  void KeysDown(sf::Event::KeyEvent key);
  
  void KeysUp(sf::Event::KeyEvent key);

  void TextEntered(char ch);
  
  void Resize(int w, int h);
  
  void FocusChanged (bool gained);

  void ShowMainMenu();    // special for in case we lose focus
  
  void PlaceCamera();

private:
  // universal camera and lighting
  // lighting lacks controls as of yet
  Camera *pCamera;

  // other stuff
  bool mouseRightButtonDown;
  bool mouseLeftButtonDown;
  bool shiftDown;

  bool inCaptureMode;

  sf::Music *backgroundMusic;
  float volumeLevel;

  // EXPERIMENTAL
  Vec3d *playerPos;

  // Functions

  bool DrawSkybox();
  void RenderScene();
};

#endif
